/**
 * 钟表基类
 */
var Clock = cc.Class({
    extends: cc.Component,

    properties: {
        hours:{
            default: 0,
            type:cc.Integer,
            tooltip:'时间：小时(0~23)',
        },
        minutes:{
            default: 0,
            type:cc.Integer,
            tooltip:'时间：分钟(0~59)',
        },
        seconds:{
            default: 0,
            type:cc.Integer,
            tooltip:'时间：秒(0~59)',
        },
        milliseconds:{
            default: 0,
            type:cc.Integer,
            tooltip:'时间：毫秒(0~999)'
        },
    },

    onLoad(){
        this.date = new Date();
        //
        this.setTime(this.hours, this.minutes, this.seconds, this.milliseconds);
    },

    /**
     * 判断此时钟与另一时钟是否相同时间。
     * 举例：
     * clock1.equals(clock2)
     */
    equals(other){
        return (this.hours == other.hours) 
        && (this.minutes == other.minutes) 
        && (this.seconds == other.seconds)
        && (this.milliseconds == other.milliseconds);
    },
    /**
     * 一定要用该方法设置时间，
     * 不要直接使用this.hours，this.minutes，this.seconds，this.milliseconds。
     * 不需要设置的分量必须传入null，不能空缺
     */
    setTime(hours, minutes, seconds, milliseconds){
        this._validateTime(hours, minutes, seconds, milliseconds);
        //
        this.updateClock(this.hours, this.minutes, this.seconds, this.milliseconds);
    },
    /**
     * 当时间更新后调用
     * @param {*} hours 当前小时
     * @param {*} minutes 当前分钟
     * @param {*} seconds 当前秒
     * @param {*} milliseconds 当前毫秒
     */
    updateClock(hours, minutes, seconds, milliseconds){
        // >>子类<<
        // 子类可重载此方法完成特定钟表样式的设定
    },

    _validateTime(hours, minutes, seconds, milliseconds){
        this.hours = (hours === null) ? this.date.getHours() : hours;
        this.minutes = (minutes === null) ? this.date.getMinutes() : minutes;
        this.seconds = (seconds === null) ? this.date.getSeconds() : seconds;
        this.milliseconds = (milliseconds === null) ? this.date.getMilliseconds() : milliseconds;
        //
        this.date.setHours(this.hours);
        this.date.setMinutes(this.minutes);
        this.date.setSeconds(this.seconds);
        this.date.setMilliseconds(this.milliseconds);
    }
});

module.exports = Clock;